#include <iostream>
#include <string>
#include <unordered_set>

using namespace std;

bool repeatedSubstringPattern(string s) {
    int n = s.length();
    
    for (int i = 1; i <= n / 2; i++) {
        if (n % i == 0) {
            string sub = s.substr(0, i);
            string pattern = "";
            
            for (int j = 0; j < n / i; j++) {
                pattern += sub;
            }
            
            if (pattern == s) {
                return true;
            }
        }
    }
    
    return false;
}

int main() {
    string s1 = "abcabc";
    string s2 = "abcdabcd";
    string s3 = "aaaaa";
    
    cout << s1 << " has repeated substring: " << (repeatedSubstringPattern(s1) ? "true" : "false") << endl;
    cout << s2 << " has repeated substring: " << (repeatedSubstringPattern(s2) ? "true" : "false") << endl;
    cout << s3 << " has repeated substring: " << (repeatedSubstringPattern(s3) ? "true" : "false") << endl;
    
    return 0;
}

    
    return true;
}

int main() {
    string s1 = "A man, a plan, a canal: Panama";
    string s2 = "race a car";
    string s3 = "Was it a car or a cat I saw?";
    string s4 = "No 'x' in Nixon";
    
    cout << s1 << " is " << (isPalindrome(s1) ? "a palindrome" : "not a palindrome") << endl;
    cout << s2 << " is " << (isPalindrome(s2) ? "a palindrome" : "not a palindrome") << endl;
    cout << s3 << " is " << (isPalindrome(s3) ? "a palindrome" : "not a palindrome") << endl;
    cout << s4 << " is " << (isPalindrome(s4) ? "a palindrome" : "not a palindrome") << endl;
    
    return 0;
}
